﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace Jardin_Informativo_Agua_Tierra
{
    public partial class ConsultaRetiro : Form
    {
        JardinInformativoBDEntities BEDE = new JardinInformativoBDEntities();
        IEnumerable<Retiro> ListaRetiros;
        Validacion v = new Validacion();
        Generador g = new Generador();

        public ConsultaRetiro()
        {
            InitializeComponent();
        }

        int valdatoniño;
        int valdatoretirante;

        private void ConsultaRetiro_Load(object sender, EventArgs e)
        {
            pbx_Consulta.Visible = true;
            pbx_NoRetira.Visible = false;
            pbx_SiRetira.Visible = false;
            pbx_ErrorConexion.Visible = false; 
            pbx_Error.Visible = false;
            toolTip1.SetToolTip(lbl_Niño, "Ingrese el RUT (sin puntos ni digito verificador) o NOMBRE Y APELLIDO del niño.");
            toolTip1.SetToolTip(lbl_Retirando, "Ingrese el RUT (sin puntos ni digito verificador) o NOMBRE Y APELLIDO de la persona que retira.");
        }

        private void btn_Consultar_Click(object sender, EventArgs e)
        {
            
            tbx_Niño.Focus();
            int encontrado = 0;
            tbx_Retirante.Focus();
            btn_Consultar.Focus();
            int seguir = valdatoniño * valdatoretirante;
            //MessageBox.Show(seguir.ToString(), "", MessageBoxButtons.OK, MessageBoxIcon.Information);
            if (seguir != 0)
            {
                this.Cursor = Cursors.WaitCursor;
                if (valdatoniño == 11) // si se ingreso el rut del niño
                {
                    if (valdatoretirante == 11) // si se ingreso el rut del retirante
                    {
                        int rutniño = int.Parse(tbx_Niño.Text);
                        int folio = g.GenCodFicha(tbx_Niño.Text);
                        int rutretiro = int.Parse(tbx_Retirante.Text);
                        try
                        {
                            Parvulo aux = BEDE.Parvulo.Single(c => c.folio_ficha == folio);
                            if (aux.rut_niño == rutniño)
                            {
                                //MessageBox.Show("se encontro el pendejo","la",MessageBoxButtons.OK, MessageBoxIcon.Information);
                                ListaRetiros = BEDE.Retiro.Where(c => c.cod_fichaniño == folio).OrderBy(c => c.id_retiro);
                                string nombre;
                                foreach (Retiro R in ListaRetiros)
                                {
                                    if (R.rut_autorizado == rutretiro) { encontrado++; nombre = R.Autorizado_Retiro.rut.ToString();}
                                }
                                //string Mensaje = "Se encontraron " + encontrado.ToString() + " personas";
                                //MessageBox.Show(Mensaje, "KAJK", MessageBoxButtons.OK, MessageBoxIcon.Information);
                                if (encontrado == 1) { pbx_SiRetira.Visible = true; pbx_NoRetira.Visible = false; pbx_Consulta.Visible = false; pbx_Error.Visible = false;} // agrega los datos generales del retiro.
                                else
                                {
                                    try
                                    {
                                        Autorizado_Retiro aa = BEDE.Autorizado_Retiro.Single(c => c.rut == rutretiro);
                                        pbx_NoRetira.Visible = true; pbx_Consulta.Visible = false; pbx_SiRetira.Visible = false; pbx_Error.Visible = false;
                                    }
                                    catch { pbx_NoRetira.Visible = true; pbx_Consulta.Visible = false; pbx_SiRetira.Visible = false; pbx_Error.Visible = false; pbx_ErrorConexion.Visible = false; }
                                }
                            }
                            else { pbx_NoRetira.Visible = false; pbx_Consulta.Visible = false; pbx_SiRetira.Visible = false; pbx_Error.Visible = true; pbx_ErrorConexion.Visible = false; }
                        }
                        catch { pbx_NoRetira.Visible = false; pbx_Consulta.Visible = false; pbx_SiRetira.Visible = false; pbx_Error.Visible = true; pbx_ErrorConexion.Visible = false; } // ha ocurrido un error mientras se realizaba la consulta.
                    }
                    else // se ingresa el nombre del retirante...
                    {
                        int rutniño = int.Parse(tbx_Niño.Text);
                        int folio = g.GenCodFicha(tbx_Niño.Text);
                        string retirante = tbx_Retirante.Text.ToString();
                        try
                        {
                            Parvulo aux = BEDE.Parvulo.Single(c => c.folio_ficha == folio);
                            if (aux.rut_niño == rutniño)
                            {
                                //MessageBox.Show("se encontro el pendejo","la",MessageBoxButtons.OK, MessageBoxIcon.Information);
                                ListaRetiros = BEDE.Retiro.Where(c => c.cod_fichaniño == folio).OrderBy(c => c.id_retiro);
                                foreach (Retiro R in ListaRetiros)
                                {
                                    if (R.Autorizado_Retiro.nombre.Replace("·", " ").Contains(retirante)) 
                                    { 
                                        encontrado++;
                                        tbx_Retirante.Clear();
                                        tbx_Retirante.Text = R.Autorizado_Retiro.nombre.Replace("·", " ").ToString().ToUpper();
                                    }
                                }
                                //string Mensaje = "Se encontraron " + encontrado.ToString() + " personas";
                                //MessageBox.Show(Mensaje, "KAJK", MessageBoxButtons.OK, MessageBoxIcon.Information);
                                if (encontrado == 1) { pbx_SiRetira.Visible = true; pbx_NoRetira.Visible = false; pbx_Consulta.Visible = false; pbx_Error.Visible = false; pbx_ErrorConexion.Visible = false; } // agrega los datos generales del retiro.
                                else
                                {
                                    try
                                    {
                                        Autorizado_Retiro aa = BEDE.Autorizado_Retiro.Single(c => c.nombre.ToString().Replace("·", " ").Contains(retirante));
                                        pbx_NoRetira.Visible = true; pbx_Consulta.Visible = false; pbx_SiRetira.Visible = false; pbx_Error.Visible = false; pbx_ErrorConexion.Visible = false;
                                    }
                                    catch { pbx_NoRetira.Visible = true; pbx_Consulta.Visible = false; pbx_SiRetira.Visible = false; pbx_Error.Visible = false; pbx_ErrorConexion.Visible = false; }
                                }
                            }
                            else { pbx_NoRetira.Visible = false; pbx_Consulta.Visible = false; pbx_SiRetira.Visible = false; pbx_Error.Visible = true; pbx_ErrorConexion.Visible = false; }
                        }
                        catch { pbx_NoRetira.Visible = false; pbx_Consulta.Visible = false; pbx_SiRetira.Visible = false; pbx_Error.Visible = true; pbx_ErrorConexion.Visible = false; } // ha ocurrido un error mientras se realizaba la consulta.
                    }
                }
                else// se ingresa el nombre del niño
                {
                    string nombreniño = tbx_Niño.Text.ToString();
                    try
                    {
                        Parvulo aux = BEDE.Parvulo.Single(c => c.nombre.Replace("·", " ").Contains(nombreniño));
                        //MessageBox.Show("", "", MessageBoxButtons.OK, MessageBoxIcon.Information);
                        tbx_Niño.Clear();
                        tbx_Niño.Text = aux.nombre.Replace("·", " ").ToString().ToUpper();
                        int folio = aux.folio_ficha;
                        int rutniño = aux.rut_niño;
                        if (valdatoretirante == 11)
                        {
                            int rutretiro = int.Parse(tbx_Retirante.Text);
                            try
                            {
                                if (aux.rut_niño == rutniño)
                                {
                                    ListaRetiros = BEDE.Retiro.Where(c => c.cod_fichaniño == folio).OrderBy(c => c.id_retiro);
                                    foreach (Retiro R in ListaRetiros)
                                    {
                                        if (R.rut_autorizado == rutretiro) 
                                        {
                                            encontrado++;
                                            tbx_Retirante.Clear();
                                            tbx_Retirante.Text = R.Autorizado_Retiro.nombre.Replace("·", " ").ToString().ToUpper();
                                        }
                                    }
                                    if (encontrado == 1) { pbx_SiRetira.Visible = true; pbx_NoRetira.Visible = false; pbx_Consulta.Visible = false; pbx_Error.Visible = false; pbx_ErrorConexion.Visible = false; } // agrega los datos generales del retiro.
                                    else
                                    {
                                        try
                                        {
                                            Autorizado_Retiro aa = BEDE.Autorizado_Retiro.Single(c => c.rut == rutretiro);
                                            pbx_NoRetira.Visible = true; pbx_Consulta.Visible = false; pbx_SiRetira.Visible = false; pbx_Error.Visible = false; pbx_ErrorConexion.Visible = false; 
                                        }
                                        catch { pbx_NoRetira.Visible = true; pbx_Consulta.Visible = false; pbx_SiRetira.Visible = false; pbx_Error.Visible = false; pbx_ErrorConexion.Visible = false; }
                                    }
                                }
                                else { pbx_NoRetira.Visible = false; pbx_Consulta.Visible = false; pbx_SiRetira.Visible = false; pbx_Error.Visible = true; pbx_ErrorConexion.Visible = false; }
                            }
                            catch { pbx_NoRetira.Visible = false; pbx_Consulta.Visible = false; pbx_SiRetira.Visible = false; pbx_Error.Visible = true; pbx_ErrorConexion.Visible = false; } // ha ocurrido un error mientras se realizaba la consulta.
                        }
                        else
                        {
                            string retirante = tbx_Retirante.Text.ToString();
                            try
                            {
                                if (aux.rut_niño == rutniño)
                                {
                                    //MessageBox.Show("se encontro el pendejo","la",MessageBoxButtons.OK, MessageBoxIcon.Information);
                                    ListaRetiros = BEDE.Retiro.Where(c => c.cod_fichaniño == folio).OrderBy(c => c.id_retiro);
                                    foreach (Retiro R in ListaRetiros)
                                    {
                                        if (R.Autorizado_Retiro.nombre.Replace("·", " ").Contains(retirante))
                                        {
                                            encontrado++; 
                                            tbx_Retirante.Clear();
                                            tbx_Retirante.Text = R.Autorizado_Retiro.nombre.Replace("·", " ").ToString().ToUpper();
                                        }
                                    }
                                    //string Mensaje = "Se encontraron " + encontrado.ToString() + " personas";
                                    //MessageBox.Show(Mensaje, "KAJK", MessageBoxButtons.OK, MessageBoxIcon.Information);
                                    if (encontrado == 1) { pbx_SiRetira.Visible = true; pbx_NoRetira.Visible = false; pbx_Consulta.Visible = false; pbx_Error.Visible = false; pbx_ErrorConexion.Visible = false; } // agrega los datos generales del retiro.
                                    else
                                    {
                                        try
                                        {
                                            Autorizado_Retiro aa = BEDE.Autorizado_Retiro.Single(c => c.nombre.ToString().Replace("·", " ").Contains(retirante));
                                            pbx_NoRetira.Visible = true; pbx_Consulta.Visible = false; pbx_SiRetira.Visible = false; pbx_Error.Visible = false; pbx_ErrorConexion.Visible = false; 
                                        }
                                        catch { pbx_NoRetira.Visible = true; pbx_Consulta.Visible = false; pbx_SiRetira.Visible = false; pbx_Error.Visible = false; pbx_ErrorConexion.Visible = false; }
                                    }
                                }
                                else { pbx_NoRetira.Visible = false; pbx_Consulta.Visible = false; pbx_SiRetira.Visible = false; pbx_Error.Visible = true; pbx_ErrorConexion.Visible = false; }
                            }
                            catch { pbx_NoRetira.Visible = false; pbx_Consulta.Visible = false; pbx_SiRetira.Visible = false; pbx_Error.Visible = true; pbx_ErrorConexion.Visible = false; } // ha ocurrido un error mientras se realizaba la consulta.
                        }
                    }
                    catch 
                    {
                        int a = v.ProbarConexion();
                        if (a == 0 | a == 1)
                        {
                            pbx_NoRetira.Visible = false; pbx_Consulta.Visible = false; pbx_SiRetira.Visible = false; pbx_Error.Visible = false; pbx_ErrorConexion.Visible = true;
                        }
                        else { pbx_NoRetira.Visible = false; pbx_Consulta.Visible = false; pbx_SiRetira.Visible = false; pbx_Error.Visible = true; pbx_ErrorConexion.Visible = false; }
                    }
                }
                this.Cursor = Cursors.Arrow;
            }
            else { }
        }

        private void tbx_Niño_Leave(object sender, EventArgs e)
        {
            tbx_Niño.Text = tbx_Niño.Text.Trim();
            if (tbx_Niño.Text != "")
            {
                valdatoniño = v.ValidarNumeros(tbx_Niño.Text);
                if (valdatoniño == 0)
                {
                    valdatoniño = v.ValidarTextos(tbx_Niño.Text);
                    if (valdatoniño == 0)
                    {
                        errorProvider1.SetError(lbl_Niño, "El dato ingresado es inconsistente.");
                    }
                    else
                    {
                        if (tbx_Niño.Text.Length < 9)
                        {
                            valdatoniño = 0;
                            errorProvider1.SetError(lbl_Niño, "El dato ingresado es poco descriptivo.\nIngrese el primer nombre y primer apellido del niño.");
                        }
                        else { valdatoniño = 12; errorProvider1.SetError(lbl_Niño, ""); }
                    }//el dato es texto.
                }
                else
                {
                    if (tbx_Niño.Text.Length < 7 | tbx_Niño.Text.Length > 8)
                    {
                        valdatoniño = 0;
                        errorProvider1.SetError(lbl_Niño, "El valor ingresado como RUT es incorrecto. el largo del dato deben ser 7 u 8 caracteres.");
                    }
                    else { valdatoniño = 11; errorProvider1.SetError(lbl_Niño, ""); }
                }// el dato es numerico. 
            }
            else { valdatoniño = 0; errorProvider1.SetError(lbl_Niño, "El campo no puede quedar vacío."); }
        }

        private void tbx_Retirante_Leave(object sender, EventArgs e)
        {
            tbx_Retirante.Text = tbx_Retirante.Text.Trim();
            if (tbx_Retirante.Text != "")
            {
                valdatoretirante = v.ValidarNumeros(tbx_Retirante.Text);
                if (valdatoretirante == 0)
                {
                    valdatoretirante = v.ValidarTextos(tbx_Retirante.Text);
                    if (valdatoretirante == 0)
                    {
                        errorProvider1.SetError(lbl_Niño, "El dato ingresado es inconsistente.");
                    }
                    else
                    {
                        if (tbx_Retirante.Text.Length < 9)
                        {
                            valdatoretirante = 0;
                            errorProvider1.SetError(lbl_Retirando, "El dato ingresado es poco descriptivo.\nIngrese el primer nombre y primer apellido del retirante.");
                        }
                        else
                        { valdatoretirante = 12; errorProvider1.SetError(lbl_Retirando, ""); }
                    }
                }
                else
                {
                    if (tbx_Retirante.Text.Length < 7 | tbx_Retirante.Text.Length > 8)
                    {
                        valdatoretirante = 0;
                        errorProvider1.SetError(lbl_Retirando, "El valor ingresado como RUT es incorrecto. el largo del dato deben ser 7 u 8 caracteres.");
                    }
                    else
                    { valdatoretirante = 11; errorProvider1.SetError(lbl_Retirando, ""); }
                }
            }
            else { valdatoretirante = 0; errorProvider1.SetError(lbl_Retirando, "El campo no puede quedar vacío."); }
        }

        private void tbx_Niño_TextChanged(object sender, EventArgs e)
        {
            pbx_NoRetira.Visible = false; pbx_Consulta.Visible = true; pbx_SiRetira.Visible = false; pbx_Error.Visible = false;
            errorProvider1.Clear();
        }

        private void tbx_Retirante_TextChanged(object sender, EventArgs e)
        {
            pbx_NoRetira.Visible = false; pbx_Consulta.Visible = true; pbx_SiRetira.Visible = false; pbx_Error.Visible = false;
            errorProvider1.Clear();
        }

        private void ConsultaRetiro_FormClosing(object sender, FormClosingEventArgs e)
        {
            System.GC.Collect();
        }
    }
}